package paquete;

import java.util.Random;


public class montecarlothread extends Thread{
	
	private funcion fObjetivo;
	private int iteraciones;
	public double[] arrayparams;
	public double minimo  = Double.MAX_VALUE;;
	

	public montecarlothread(funcion fObjetivo, int iteraciones) {
		this.fObjetivo = fObjetivo;
		this.iteraciones = iteraciones;		
		

		arrayparams = new double[fObjetivo.getNumParametros()];
	}

	@Override
	public void run() {
		double[] parametros= new double[fObjetivo.getNumParametros()];
		Random rand = new Random();

		for (int i = 0; i < iteraciones; i++) {
			for (int j = 0; j < parametros.length; j++)
				parametros[j] = rand.nextDouble() * 10;

			//se evalua la funcion
			double valorFuncion = fObjetivo.ejecutarFuncion(parametros);

			// verifico el minimo
			if (valorFuncion < minimo) {
				minimo = valorFuncion;
				System.arraycopy(parametros, 0, arrayparams, 0, arrayparams.length);
			}
		}
	}

}
